//
//  HTTPAPI.h
//  AccountEasy
//
//  Created by mac on 2020/7/22.
//  Copyright © 2020 AccountEasy. All rights reserved.
//


#import <Foundation/Foundation.h>

typedef NS_ENUM(int, RequestType)
{
    POST,
    GET
};

/** HTTP请求成功回调  */
typedef void (^SuccessBlock)(NSURLSessionDataTask *dataTask, id dataObj);
/** HTTP请求失败回调  */
typedef void (^FailedBlock)(NSURLSessionDataTask *dataTask, NSError *error);


@class HTTPAPI;
@class UIView;

@protocol HTTPAPIDelegate <NSObject>

@required

/**
 *  从服务器请求数据成功回调方法
 *
 *  @param data 从服务器获取的数据
 *  @param api  请求对象
 */
- (void)fetchData:(id)data fromServerSuccessedWithAPI:(HTTPAPI *)api;

/**
 *  从服务器请求数据失败回调方法
 *
 *  @param error 错误详情
 *  @param api  请求对象
 */
- (void)fetchDataFromServerFailedWithError:(NSError *)error API:(HTTPAPI *)api;

@end

@interface HTTPAPI : NSObject

@property (weak, nonatomic) id <HTTPAPIDelegate> delegate;//!<代理

@property (strong, nonatomic) NSDictionary *parameters;     //!<请求参数
@property (strong, nonatomic) NSDictionary *coverParameters;//!<覆盖请求参数，自己传入拼接的参数字典
@property (strong, nonatomic) NSString *methodName;         //!<请求方法名称
@property (strong, nonatomic) NSString *serverAddr;         //!<服务器地址
@property (strong, nonatomic) NSString *serverPort;         //!<服务器端口
@property (strong, nonatomic) NSString *url;                //!<统一资源定位符
@property (strong, nonatomic) UIImage *upImage;             //!<保存上传的图片

@property (strong, nonatomic) NSURLSessionDataTask *dataTask;
@property (assign, nonatomic) RequestType requestType;      //!<请求方法


@property (nonatomic, assign) BOOL isPromptErrorMessage;//!< 是否浮现服务端Error Description 默认YES
@property (nonatomic, assign) BOOL isCode0Msg;//!<接口成功返回后的失败信息   默认YES

/**
 网络请求
 
 @param type 请求类型
 */
- (void)sendRequestToServerWithType:(RequestType)type;


/**
 网络请求
 
 @param type 请求类型
 @param view 活动指示器所在视图
 */
- (void)sendRequestToServerWithType:(RequestType)type
        showActivityIndicatorOnView:(UIView *)view;


/**
 网络请求，活动指示器居中显示，带蒙版效果
 
 @param type 请求类型
 */
- (void)sendRequestToServerWithActivityViewAndMask:(RequestType)type;


/**
 *  表单形式向服务器发送图片   导入 #import "HDUploadAPI.h"
 *
 *  @param image   需要上传的图片
 */
- (void)sendServerImageData:(UIImage *)image;

// ocr 识别图片，需要定制处理
- (void)OCRImageData:(NSArray<UIImage *> *)photos AndScale:(CGFloat)scale;

/**
 *  工厂方法初始化当前请求对象以及设置代理
 *
 *  @param object api代理对象
 *
 *  @return 当前实例
 */
+ (instancetype)apiWithDelegate:(id <HTTPAPIDelegate>)object;

//兼容上传图片
-(void)postDataWithUrl:(NSString *)url params:(NSMutableDictionary *)params imageDatas:(NSArray *)images success:(void (^)(id response))success failure:(void (^)(NSError *error))failure;


-(void)submitForm:(RequestType)type;

@end
